package main

import (
	"math"
	"runtime"
	"time"
)

// ref: https://gocn.vip/topics/17480
// ballast 类似于地震时的稳定器
// go 内存 ballast
// 查看内存分布情况
// ps -eo pmem,comm,pid,maj_flt,min_flt,rss,vsz --sort -rss | numfmt --header --to=iec --field 4-5 | numfmt --header --from-unit=1024 --to=iec --field 6-7 | column -t | egrep "[t]est|[P]ID"
// VSZ 表示进程的虚拟内存
// RSS 代表分配的实际物理内存
// 这里你可能有一个疑问，这里初始化一个 10G 的数组，不就占用了 10 G 的物理内存呢？ 答案其实是不会的。
func main() {
	ballast := make([]byte,10 * 1024*1024*1024) // 10G
	// do something
	//下面的代码就初始化了一个 ballast，利用 runtime.KeepAlive 来保证 ballast 不会被 GC 给回收掉。
	//利用这个特性，就能保证 GC 在 10G 的一倍时才能被触发，这样就能够比较精准控制 GO GC 的触发时机。
	<-time.After(time.Duration(math.MaxInt64))
	runtime.KeepAlive(ballast)
}
